From 2c7066c7dbd72e9a5039b015fa2090e95f5628ba Mon Sep 17 00:00:00 2001 From: robertl Date: Mon, 12 Mar 2007 15:34:57 +0000 Subject: [PATCH] Add test entry for multiple GPX 1.1 links. Try to fix our handling of schemaLoc in GPX 1.1 Make transform-rte and transform-wpt (validated) GPX 1.1 since they came from GPX 1.1. --- gpx.c | 19 +++++++++++++++---- reference/multiple-links.gpx | 35 +++++++++++++++++++++++++++++++++++ reference/transform-rte.gpx | 8 +++++--- reference/transform-wpt.gpx | 8 +++++--- testo | 11 +++++++++-- 5 files changed, 69 insertions(+), 12 deletions(-) create mode 100644 reference/multiple-links.gpx diff --git a/gpx.c b/gpx.c index 0dfeda323..cee3d927c 100644 --- a/gpx.c +++ b/gpx.c @@ -69,6 +69,7 @@ static format_specific_data **fs_ptr; #define MYNAME "GPX" #define MY_CBUF_SZ 4096 #define DEFAULT_XSI_SCHEMA_LOC "http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd" +#define DEFAULT_XSI_SCHEMA_LOC_11 "http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd" #define DEFAULT_XSI_SCHEMA_LOC_FMT "\"http://www.topografix.com/GPX/%c/%c http://www.topografix.com/GPX/%c/%c/gpx.xsd\"" #ifndef CREATOR_NAME_URL # define CREATOR_NAME_URL "GPSBabel - http://www.gpsbabel.org" @@ -389,21 +390,32 @@ prescan_tags(void) static void tag_gpx(const char **attrv) { - const char **avp = &attrv[0]; - while (*avp) { + const char **avp; + for (avp = &attrv[0]; *avp; avp += 2) { if (strcmp(avp[0], "version") == 0) { gpx_version = avp[1]; } else if (strcmp(avp[0], "src") == 0) { gpx_creator = avp[1]; } + /* + * Our handling of schemaLocation really is weird. + * If we see we have a "normal" GPX 1.1 header, on read, + * flip our default on write to use that and don't append + * it to the rest... + */ else if (strcmp(avp[0], "xsi:schemaLocation") == 0) { + if (0 == strcmp(avp[1], DEFAULT_XSI_SCHEMA_LOC_11)) { + if (0 == strcmp(xsi_schema_loc, DEFAULT_XSI_SCHEMA_LOC)) + xfree(xsi_schema_loc); + xsi_schema_loc = xstrdup(DEFAULT_XSI_SCHEMA_LOC_11); + continue; + } if (0 == strstr(xsi_schema_loc, avp[1])) { xsi_schema_loc = xstrappend(xsi_schema_loc, " "); xsi_schema_loc = xstrappend(xsi_schema_loc, avp[1]); } } - avp+=2; } } @@ -866,7 +878,6 @@ gpx_end(void *data, const XML_Char *xml_el) lt = xstrdup(lrtrim(link_text)); } - fprintf(stderr, "Here %s/%s\n", link_url, lt); add_url(wpt_tmp, xstrdup(link_url), lt); link_text = NULL; } diff --git a/reference/multiple-links.gpx b/reference/multiple-links.gpx new file mode 100644 index 000000000..0e347db8e --- /dev/null +++ b/reference/multiple-links.gpx @@ -0,0 +1,35 @@ + + + + + + + + + 001 + 3348 Martha St + 3348 Martha St + + one + + + two dots + + + + + three dots + + Waypoint + + + SymbolAndDescription + + + + diff --git a/reference/transform-rte.gpx b/reference/transform-rte.gpx index c7ba05f7c..34df3a1d1 100644 --- a/reference/transform-rte.gpx +++ b/reference/transform-rte.gpx @@ -1,12 +1,14 @@ +xmlns="http://www.topografix.com/GPX/1/1" +xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd"> + + 44.586548 diff --git a/reference/transform-wpt.gpx b/reference/transform-wpt.gpx index f76d4055b..a16a39b41 100644 --- a/reference/transform-wpt.gpx +++ b/reference/transform-wpt.gpx @@ -1,12 +1,14 @@ +xmlns="http://www.topografix.com/GPX/1/1" +xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd"> + + 23.469600 diff --git a/testo b/testo index 36fc45026..895269ac4 100755 --- a/testo +++ b/testo @@ -1157,9 +1157,9 @@ compare ${TMPDIR}/ge-eg.kml ${REFERENCE}/earth-expertgps.kml # Transformation filter (transform) tests # rm -f ${TMPDIR}/transform* -${PNAME} -i gpx -f ${REFERENCE}/expertgps.gpx -x nuketypes,routes,tracks -x transform,rte=wpt,del=y -o gpx -F ${TMPDIR}/transform-rte.gpx +${PNAME} -i gpx -f ${REFERENCE}/expertgps.gpx -x nuketypes,routes,tracks -x transform,rte=wpt,del=y -o gpx,gpxver=1.1 -F ${TMPDIR}/transform-rte.gpx compare ${TMPDIR}/transform-rte.gpx ${REFERENCE}/transform-rte.gpx -${PNAME} -i gpx -f ${REFERENCE}/expertgps.gpx -x nuketypes,waypoints,tracks -x transform,wpt=rte,del=y -o gpx -F ${TMPDIR}/transform-wpt.gpx +${PNAME} -i gpx -f ${REFERENCE}/expertgps.gpx -x nuketypes,waypoints,tracks -x transform,wpt=rte,del=y -o gpx,gpxver=1.1 -F ${TMPDIR}/transform-wpt.gpx compare ${TMPDIR}/transform-wpt.gpx ${REFERENCE}/transform-wpt.gpx # @@ -1187,4 +1187,11 @@ ${PNAME} -i alantrl -f ${REFERENCE}/alantrl.trl -o alantrl -F ${TMPDIR}/alantrl- ${PNAME} -i alantrl -f ${TMPDIR}/alantrl-new.trl -o gpx -F ${TMPDIR}/alantrl-new.gpx compare ${TMPDIR}/alantrl-new.gpx ${REFERENCE}/alantrl.gpx +# +# Test > 1 URL in selected files. +# +rm -f ${TMPDIR}/mlink* +${PNAME} -i gpx -f reference/multiple-links.gpx -o gpx,gpxver=1.1 -F ${TMPDIR}/mlink-1.gpx +compare ${TMPDIR}/mlink-1.gpx reference/multiple-links.gpx + exit 0 -- 2.30.2